package dao.Azubi;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import dao.DaoOberklasse;

import valueobjects.Azubi.Azubi;
import valueobjects.Azubi.AzubiImpl;

/**
 * 
 * @author Raphael Berger
 * 
 *         Beschreibung: In dieser Klasse stehen die SQL-Befehle, die die
 *         Datenbank bzw. die Tabellen NICHT �ndern.
 * 
 */

public class AzubiDAOImpl extends DaoOberklasse<Azubi> implements AzubiDAO {
	@Override
	public List<Azubi> holeAlleAzubis() {
		return this.executeSQLSelect("SELECT * FROM azubi;");
	}

	@Override
	public List<Azubi> executeSQLSelect(String sql) {
		ResultSet rs = this.connectionDAO.sqlSelectAusfuehren(sql);

		List<Azubi> liste = new ArrayList<Azubi>();
		try {
			while (rs.next()) {
				// Mapping von Resultset zu Objekten.
				Azubi azubi = new AzubiImpl();

				azubi.setId(rs.getInt("azubi_id"));
				azubi.setName(rs.getString("name"));
				azubi.setVorname(rs.getString("vorname"));
				azubi.setStrasse(rs.getString("strasse"));
				azubi.setHausnummer(rs.getInt("hausnummer"));
				azubi.setPlz(rs.getString("plz"));
				azubi.setOrt(rs.getString("ort"));
				azubi.setVorwahl(rs.getString("vorwahl"));
				azubi.setTelefon(rs.getString("telefon"));
				azubi.setEmail(rs.getString("email"));
				azubi.setBeruf(rs.getString("beruf"));
				azubi.setGeschlecht(rs.getString("geschlecht"));
				azubi.setReligion(rs.getString("religion"));
				azubi.setStaatsangehoerigkeit(rs
						.getString("staatsangehoerigkeit"));
				azubi.setSchulabschluss(rs.getString("schulabschluss"));
				azubi.setGeburtsdatum(rs.getDate("geburtsdatum"));
				azubi.setGeburtsort(rs.getString("geburtsOrt"));
				azubi.setGeburtsland(rs.getString("geburtsLand"));
				azubi.setSchulname(rs.getString("schulname"));
				azubi.setSchulStrasse(rs.getString("schulStrasse"));
				azubi.setSchulOrt(rs.getString("schulOrt"));
				azubi.setSchulForm(rs.getString("schulForm"));
				azubi.setSchulplz(rs.getString("schulplz"));
				azubi.setEintrittsdatum(rs.getDate("eintrittsdatum"));
				azubi.setAustrittsdatum(rs.getDate("austrittsdatum"));
				azubi.setFk_ausbilder(rs.getInt("fk_ausbilder"));
				azubi.setFk_klasse(rs.getInt("fk_klasse"));

				liste.add(azubi);

			}
		} catch (SQLException e) {
			// Bei Fehlern.
			e.printStackTrace();
		}
		return liste;
	}

	@Override
	public void speichereAzubi(Azubi azubi) {

		String sql = "INSERT INTO Azubi (name, vorname, strasse, hausnummer, plz, ort, vorwahl, telefon, email,"
				+ "beruf, geschlecht, religion, staatsangehoerigkeit, schulabschluss, geburtsdatum, geburtsOrt, geburtsLand,"
				+ "schulname, schulStrasse, schulOrt, schulForm, schulplz, eintrittsdatum, austrittsdatum, fk_ausbilder,"
				+ "fk_klasse) " + "VALUES ('"
				+ azubi.getName()
				+ "', '"
				+ azubi.getVorname()
				+ "', '"
				+ azubi.getStrasse()
				+ "', "
				+ azubi.getHausnummer()
				+ ", '"
				+ azubi.getPlz()
				+ "', '"
				+ azubi.getOrt()
				+ "', '"
				+ azubi.getVorwahl()
				+ "', '"
				+ azubi.getTelefon()
				+ "', '"
				+ azubi.getEmail()
				+ "', '"
				+ azubi.getBeruf()
				+ "', '"
				+ azubi.getGeschlecht()
				+ "', '"
				+ azubi.getReligion()
				+ "', '"
				+ azubi.getStaatsangehoerigkeit()
				+ "', '"
				+ azubi.getSchulabschluss()
				+ "', '"
				+ DateToSDF(azubi.getGeburtsdatum())
				+ "', '"
				+ azubi.getGeburtsort()
				+ "', '"
				+ azubi.getGeburtsland()
				+ "', '"
				+ azubi.getSchulname()
				+ "', '"
				+ azubi.getSchulStrasse()
				+ "', '"
				+ azubi.getSchulOrt()
				+ "', '"
				+ azubi.getSchulForm()
				+ "', '"
				+ azubi.getSchulplz()
				+ "', '"
				+ DateToSDF(azubi.getEintrittsdatum())
				+ "', '"
				+ DateToSDF(azubi.getAustrittsdatum())
				+ "', "
				+ azubi.getFk_ausbilder() + ", " + azubi.getFk_klasse() + ");";

		this.executeSQL(sql);

	}

	@Override
	public void aendereAzubi(Azubi azubi) {

		String sql = "UPDATE Azubi SET Name = '" + azubi.getName()
		+ "',vorname = '" + azubi.getVorname() + "', strasse = '"
		+ azubi.getStrasse() + "', hausnummer = "
		+ azubi.getHausnummer() + ", plz = '"
		+ azubi.getPlz() + "', ort = '"
		+ azubi.getOrt() + "', vorwahl = '"
		+ azubi.getVorwahl() + "', telefon = '"
		+ azubi.getTelefon() + "', email = '"
		+ azubi.getEmail() + "', beruf = '"
		+ azubi.getBeruf()+ "', geschlecht = '"
		+ azubi.getGeschlecht()+ "', religion = '"
		+ azubi.getReligion()+ "', staatsangehoerigkeit = '"
		+ azubi.getStaatsangehoerigkeit()+ "', schulabschluss = '"
		+ azubi.getSchulabschluss()+ "', geburtsdatum = '"
		+ DateToSDF(azubi.getGeburtsdatum())+ "', geburtsOrt = '"
		+ azubi.getGeburtsort()+ "', geburtsLand = '"
		+ azubi.getGeburtsland()+ "', schulname = '"
		+ azubi.getSchulname()+ "', schulStrasse = '"
		+ azubi.getSchulStrasse()+ "', schulOrt = '"
		+ azubi.getSchulOrt()+ "', schulForm = '"
		+ azubi.getSchulForm()+ "', schulplz = '"
		+ azubi.getSchulplz()+ "', eintrittsdatum = '"
		+ DateToSDF(azubi.getEintrittsdatum())+ "', austrittsdatum = '"
		+ DateToSDF(azubi.getAustrittsdatum())+ "', fk_ausbilder = "
		+ azubi.getFk_ausbilder()+ ", fk_klasse = "
		+ azubi.getFk_klasse() + " WHERE azubi_id = "
		+ azubi.getId() + ";";

		this.executeSQL(sql);

	}

	@Override
	public void loescheAzubi(int id) {
		
		String sql = "DELETE FROM Azubi WHERE azubi_id = " + id + ";";

		this.executeSQL(sql);

	}

}
